package com.neusoft.cmsprojects.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.struts2.ServletActionContext;

/**
 * index:		文件操作相关的工具类
 * @author guanhaimin
 * date:2014年12月18日下午2:05:15
 */
public class FileUtil {
	private static String root = ServletActionContext.getServletContext().getRealPath("/").replaceAll("%20", " ");//服务器根路径
	
	/**
	 * index:		创建文件夹
	 * @author guanhaimin
	 * @date 2014年12月25日 下午4:46:46 void
	 */
	public static void CreateDiretory(String path) {
		File file = new File(root + path);
		file.mkdirs();
	}

	/**
	 * index:		文件保存操作
	 * @author guanhaimin
	 * @date 2014年12月18日 下午2:47:01
	 * @param inFile 读取文件
	 * @param outFile 输出文件
	 * @throws IOException 
	 */
	public static void saveFile(File inFile, File outFile) throws IOException{
		InputStream is = new FileInputStream(inFile);
		OutputStream os = new FileOutputStream(outFile);
		byte[] buffer = new byte[1024];
		int length = 0;
		while ((length = is.read(buffer)) > 0) {
			os.write(buffer, 0, length);
		}
		is.close();
		os.close();
	}
	
	/**
	 * index:		文件转移
	 * @author guanhaimin
	 * @date 2014年12月18日 下午2:11:07
	 * @param oldRrl 原文件路径
	 * @param newUrl 新保存路径
	 * @param filename 文件名
	 * @throws IOException 
	 */
	public static void MoveFile(String oldUrl, String newUrl, String filename) throws IOException{
		oldUrl = root + oldUrl;
		newUrl = root + newUrl;
		File oldfile = new File(oldUrl + filename);
		File newfile = new File(newUrl + filename);
		if(oldfile != null){
			saveFile(oldfile, newfile);
			oldfile.delete();
		}
	}
	
	/**
	 * index:		从html文本中获取文件名
	 * @author guanhaimin
	 * @date 2014年12月18日 下午2:29:29
	 * @param text	html文本
	 * @param flag 截取文件名标志
	 */
	public static List<String> getFileNameFromText(String text, String flag){
		Pattern p = Pattern.compile(flag);  //"src=\"tempfiles/20141218/(.*?)\" title=\""
		Matcher m = p.matcher(text);
		List<String> list = new ArrayList<String>();
		String temp;
		while(m.find()) {       
			temp= m.group(1);
			list.add(temp);
		}
		return list;
	}
	
	
	/**
	 * index:		保存编辑上传的图片
	 * @author guanhaimin
	 * @date 2014年12月18日 下午2:39:56
	 * @param tempfileUrl 临时文件夹路径
	 * @param saveUrl 保存文件夹路径
	 * @param text html文本
	 * @param flag 截取文件名标志
	 * @throws IOException 
	 */
	public static void saveImageFromText(String tempfileUrl, String saveUrl, String text, String flag) throws IOException{
		List<String> filenameList = getFileNameFromText(text, flag);
		if(filenameList != null &&filenameList.size() >= 1){
			for(int i=0; i<filenameList.size(); ++i){
				MoveFile(tempfileUrl, saveUrl, filenameList.get(i));
			}
		}
	}
	
	/**
	 * index:		删除文件夹下面的所有文件
	 * @author guanhaimin
	 * @date 2014年12月19日 下午11:13:43
	 * @param folderUrl 指定文件夹路径
	 */
	public static void deleteTheFolderOfFiles(String folderUrl){
		folderUrl = root + folderUrl;
		File folderFile = new File(folderUrl);
		if(folderFile != null){
			File[] files = folderFile.listFiles();
			if(files != null){
				for(int i=0; i<files.length; ++i){
					files[i].delete();
				}
			}
		}
	}
	
	/**
	 * index:		删除文本中的图片
	 * @author guanhaimin
	 * @date 2014年12月23日 下午2:10:59
	 * @param saveUrl
	 * @param text
	 * @param flag void
	 */
	public static void deleteImageFromText(String saveUrl, String text, String flag) {
		List<String> filenameList = getFileNameFromText(text, flag);
		saveUrl = root + saveUrl;
		if(filenameList != null){
			for(int i=0; i<filenameList.size(); ++i){
				File file = new File(saveUrl + filenameList.get(i));
				if(file != null){
					file.delete();
				}
			}
		}
	}
	
}
